package pe.edu.upc.dew.grupo04.dao;

import java.util.List;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.jdbc.core.RowMapper;

import pe.edu.upc.dew.grupo04.model.Funcion;
import pe.edu.upc.dew.grupo04.model.Sala;
import pe.edu.upc.dew.grupo04.model.Ticket;
import pe.edu.upc.dew.grupo04.model.Usuario;
import pe.edu.upc.dew.grupo04.model.Pelicula;

public class TicketDaoJdbc extends SimpleJdbcDaoSupport implements TicketDao {

	private RowMapper<Ticket> mapper;

	public TicketDaoJdbc() {

		mapper = new RowMapper<Ticket>() {
			public Ticket mapRow(ResultSet rs, int rowNum) throws SQLException {

				Ticket ticket = new Ticket();
				ticket.setCodTicket(rs.getInt("codTicket"));

				Usuario usuario = new Usuario();
				usuario.setCodUsuario(rs.getInt("codUsuario"));
				usuario.setNombre(rs.getString("nombre"));
				usuario.setApellido(rs.getString("apellido"));
				usuario.setEdad(rs.getInt("edad"));
				usuario.setEmail(rs.getString("email"));
				usuario.setTelefono(rs.getString("telefono"));
				usuario.setDni(rs.getString("dni"));
				usuario.setCargo(rs.getString("cargo"));
				usuario.setUsername(rs.getString("username"));
				usuario.setPassword(rs.getString("password"));

				Funcion funcion = new Funcion();
				funcion.setCodFuncion(rs.getInt("codPelicula"));
				funcion.setHora("hora");
				funcion.setPrecio(rs.getDouble("precio"));

				ticket.setUsuario(usuario);
				ticket.setFuncion(funcion);

				return ticket;
			}

		};

	}

	public void crearTicket(Ticket ticket) {
		getSimpleJdbcTemplate().update(
				"insert into ticket(codTicket,codusuario,codFuncion)"
						+ " values(?,?,?)", ticket.getCodTicket(),
				ticket.getUsuario().getCodUsuario(),
				ticket.getFuncion().getCodFuncion());
	}

	public Ticket getTicketPorCodigo(int codTicket) {
		return getSimpleJdbcTemplate().queryForObject(
				"select * from ticket where codTicket=?",
				new BeanPropertyRowMapper<Ticket>(Ticket.class), codTicket);
	}

	public List<Ticket> getTickets() {
		return getSimpleJdbcTemplate().query("select * from ticket",
				new BeanPropertyRowMapper<Ticket>(Ticket.class));
	}

	private List<Ticket> getTicketsByCodigo(int codFuncion) {
		return getSimpleJdbcTemplate().query("select * from ticket where codFUncion = ?",
				new BeanPropertyRowMapper<Ticket>(Ticket.class), codFuncion);
	}
	
	public void eliminarTicket(int codTicket) {
		getSimpleJdbcTemplate().update("delete from ticket where codTicket=?",
				codTicket);
	}

	public int getCountTicketPorFuncion(int codFuncion){
		return this.getTicketsByCodigo(codFuncion).size();
	}
	
	
}